#include<iostream>
#include<signal.h>
#include<unistd.h>
#include<sys/types.h>
//1、先屏蔽2号信号
//2、获取进程的pending位图
//3、打印所有的pending位图中的信号
//4、未来给目标进程发送2号信号---屏蔽2号信号---2号信号不会被淘汰---2号信号一直在pending位图中

void printSig(sigset_t&t)
{
    std::cout<<"pending bitmap:";
    for(int i=1;i<32;i++)
    {
        if(sigismember(&t,i))
            std::cout<<1;
        else 
            std::cout<<0;
    }
    std::cout<<std::endl;
}

void headler(int signal)
{
    std::cout<<"捕捉到"<<signal<<"号信号"<<std::endl;
}

int main()
{
    sigset_t block;
    signal(2,headler);
    //先初始化
    sigemptyset(&block);
    sigaddset(&block,2);
    sigset_t oldblock;//保留老的屏蔽字
    //屏蔽2号信号
    sigprocmask(SIG_SETMASK,&block,&oldblock);
    std::cout<<getpid()<<std::endl;
    int cnt=0;
    while(true)
    {
        //获取进程的pending位图
        sigset_t pend;
        sigpending(&pend);
        //打印所有的pending位图中的信号
        printSig(pend);
        cnt++;
        //重新结束屏蔽
        if(cnt==20)
        {
            std::cout<<"解除对2号信号的屏蔽"<<std::endl;
            sigprocmask(SIG_UNBLOCK,&block,&oldblock);
        }
        sleep(1);
    }
    
    return 0;
}